package pruebasUnitarias.pruebasPatronesMovimiento;

import juego.Escenario;
import movimiento.*;
import movimiento.patrones.ZigZag;
import org.junit.*;
import auxiliares.Vector;

public class ZigZagTest {
	private PatronMovimiento movimiento;
	private Posicion posInicialLimiteIzq, posInicialLimiteDer;
	private Posicion posIntermediaLimiteIzq, posIntermediaLimiteDer;
	private Posicion posFinalLimiteIzq, posFinalLimiteDer;
	private Vector velocidadLimiteIzq, velocidadLimiteDer;

	@Before
	public void setUp() {
		Escenario.getInstance().setMaxX(100);
		Escenario.getInstance().setMaxY(100);
		this.movimiento = new ZigZag();
		posInicialLimiteDer = new Posicion(
				Escenario.getInstance().getMaxX() - 4, 48);
		posIntermediaLimiteDer = new Posicion(
				Escenario.getInstance().getMaxX() - 1, 50);
		posFinalLimiteDer = new Posicion(Escenario.getInstance().getMaxX() - 4,
				52);
		posInicialLimiteIzq = new Posicion(4, 48);
		posIntermediaLimiteIzq = new Posicion(1, 50);
		posFinalLimiteIzq = new Posicion(4, 52);
		velocidadLimiteDer = new Vector(3, 2);
		velocidadLimiteIzq = new Vector(-3, 2);
	}

	@Test
	public void testLlegarLimiteDer() {
		Posicion posRetorno;
		posRetorno = movimiento.calcularNuevaPosicion(posInicialLimiteDer,
				velocidadLimiteDer);
		Assert.assertTrue(posRetorno.equals(posIntermediaLimiteDer));
		posRetorno = movimiento.calcularNuevaPosicion(posRetorno,
				velocidadLimiteDer);
		Assert.assertTrue(velocidadLimiteDer.getComponenteX() == -3);
		Assert.assertTrue(velocidadLimiteDer.getComponenteY() == 2);
		Assert.assertTrue(posRetorno.equals(posFinalLimiteDer));

		System.out
				.println("El movimiento en zigzag funciona bien al llegar a la derecha");
	}

	@Test
	public void testLlegarLimiteIzq() {
		Posicion posRetorno;
		posRetorno = movimiento.calcularNuevaPosicion(posInicialLimiteIzq,
				velocidadLimiteIzq);
		Assert.assertTrue(posRetorno.equals(posIntermediaLimiteIzq));
		posRetorno = movimiento.calcularNuevaPosicion(posRetorno,
				velocidadLimiteIzq);
		Assert.assertTrue(velocidadLimiteIzq.getComponenteX() == 3);
		Assert.assertTrue(velocidadLimiteIzq.getComponenteY() == 2);
		Assert.assertTrue(posRetorno.equals(posFinalLimiteIzq));

		System.out
				.println("El movimiento en zigzag funciona bien al llegar a la izquierda");
	}

}
